﻿// Wormholes POJ - 3259.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <queue>



using  namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-3259

/*
虫洞

农夫约翰在探索他的众多农场时，发现了许多神奇的虫洞。虫洞非常奇特，因为它是一条单向路径，能在你进入虫洞之前将你送到目的地！
FJ 的每个农场都由 N 个（1 ≤ N ≤ 500）方便编号为 1...N 的区域、M 个（1 ≤ M ≤ 2500）路径和 W 个（1 ≤ W ≤ 200）虫洞组成。

由于 FJ 是一个狂热的时空旅行爱好者，他想做如下事情：
从某个场开始，穿越一些路径和虫洞，然后在他最初出发前的某个时间返回起始场。或许，他将能与自己相遇:) .

为了帮助 FJ 确定这是否可行，他将向您提供他的 F（1 ≤ F ≤ 5）个农场的完整地图。
任何路径的时间都不会超过 10,000 秒，任何虫洞都不会让 FJ 的时间倒退超过 10,000 秒。

输入

第 1 行 一个整数 F，  农场说明如下。
每个农场的第 1 行： 三个空格分隔的整数： N、M 和 W
每个农场的第 2...M+1 行： 三个空格分隔的数字（S、E、T），分别描述：S 和 E 之间的双向路径，需要 T 秒才能走完。
两个农场之间可能有不止一条路径相连。
每个农场的 M+2...M+W+1 行： 三个空格分隔的数字（S、E、T），
分别描述 从 S 到 E 的单程路径，该路径也会使旅行者后退 T 秒。

第 1...F 行：对于每个农场，如果 FJ 可以实现目标，则输出 "YES"，否则输出 "NO"（不含引号）。

2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8

NO
YES


提示

对于农场 1，FJ 无法回到过去。
对于农场 2，FJ 可以按 1->2->3->1 的循环回到过去，在离开前 1 秒回到起始位置。他可以从循环中的任何位置出发来实现这一目的。
*/

const int N = 510;
const int M = 6010;
int h[N], w[M], e[M], ne[M], idx;
int dist[N], cnt[N];
bool st[N];
int t;
int n, m, worm;


void add(int a, int b, int c) {
	e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

bool spfa() {
	memset(st, 0, sizeof st);
	memset(dist, 0, sizeof dist);
	memset(cnt, 0, sizeof cnt);

	queue<int> q;
	for (int i = 1; i <= n; i++) {
		q.push(i);
		st[i] = true;
	}
	while (q.size()) {
		int t = q.front();
		q.pop();

		st[t] = false;

		for (int i = h[t]; i != -1; i = ne[i]) {
			int j = e[i];
			if (dist[j] > dist[t] + w[i]) {
				dist[j] = dist[t] + w[i];
				cnt[j] = cnt[t] + 1;
				if (cnt[j] >= n) return true;
				if (!st[j]) {
					q.push(j);
					st[j] = true;
				}
			}
		}
	}


	return  false;
}


int main()
{
	cin >> t;
	while (t--) {
		memset(h, -1, sizeof h); idx = 0;
		cin >> n >> m >> worm;
		for (int i = 0; i < m; i++) {
			int a, b, c; cin >> a >> b >> c;
			add(a, b, c); add(b, a, c);
		}
		for (int i = 0; i < worm; i++) {
			int a, b, c; cin >> a >> b >> c;
			add(a, b, -c);
		}
		if (spfa()) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}
	}
}

 